package com.funsport.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.funsport.entity.EventSignup;

import java.util.List;

/**
 * 活动报名 Service接口
 */
public interface IEventSignupService extends IService<EventSignup> {

    /**
     * 报名活动
     *
     * @param userId 用户ID
     * @param eventId 活动ID
     * @param note 报名备注
     * @return 是否成功
     */
    boolean signupEvent(Long userId, Long eventId, String note);

    /**
     * 取消报名
     *
     * @param userId 用户ID
     * @param eventId 活动ID
     * @return 是否成功
     */
    boolean cancelSignup(Long userId, Long eventId);

    /**
     * 签到
     *
     * @param userId 用户ID
     * @param eventId 活动ID
     * @return 是否成功
     */
    boolean checkIn(Long userId, Long eventId);

    /**
     * 审核报名
     *
     * @param signupId 报名ID
     * @param approved 是否通过
     * @param operatorId 操作者ID
     * @return 是否成功
     */
    boolean approveSignup(Long signupId, Boolean approved, Long operatorId);

    /**
     * 候补转正
     *
     * @param eventId 活动ID
     * @return 转正人数
     */
    int promoteFromWaitlist(Long eventId);

    /**
     * 活动评价
     *
     * @param userId 用户ID
     * @param eventId 活动ID
     * @param rating 评分（1-5）
     * @param review 评价内容
     * @return 是否成功
     */
    boolean rateEvent(Long userId, Long eventId, Integer rating, String review);

    /**
     * 获取活动参与者列表
     *
     * @param eventId 活动ID
     * @param status 状态筛选
     * @return 参与者列表
     */
    List<EventSignup> getEventParticipants(Long eventId, String status);

    /**
     * 获取用户的报名记录
     *
     * @param userId 用户ID
     * @param status 状态筛选
     * @return 报名记录列表
     */
    List<EventSignup> getUserSignups(Long userId, String status);

    /**
     * 检查用户是否已报名
     *
     * @param userId 用户ID
     * @param eventId 活动ID
     * @return 是否已报名
     */
    boolean hasSignedUp(Long userId, Long eventId);

    /**
     * 获取活动已确认人数
     *
     * @param eventId 活动ID
     * @return 已确认人数
     */
    int getConfirmedCount(Long eventId);
}
